// StreamBase64 - A utility to convert to/from base64 stream
// Note: does not buffer data, must be piped
class StreamBase64 {
    constructor() {
        // consuming pipe streams go here
        this.pipes = [];
    }

    // writable
    // event drain - if write returns false (which it won't), indicates when safe to write again.
    // finish - end() has been called
    // pipe(src) - pipe() has been called on readable
    // unpipe(src) - unpipe() has been called on readable
    // error - duh

    write( /* data, encoding */) {
        return true;
    }

    cork() {
    }

    uncork() {
    }

    end( /* chunk, encoding, callback */) {
    }

    // readable
    // event readable - some data is now available
    // event data - switch to flowing mode - feeds chunks to handler
    // event end - no more data
    // event close - optional, indicates upstream close
    // event error - duh
    read( /* size */) {
    }

    setEncoding(encoding) {
        // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects
        this.encoding = encoding;
    }

    pause() {
    }

    resume() {
    }

    isPaused() {
    }

    pipe(destination) {
        // add destination to pipe list & write current buffer
        this.pipes.push(destination);
    }

    unpipe(destination) {
        // remove destination from pipe list
        this.pipes = this.pipes.filter(pipe => pipe !== destination);
    }

    unshift( /* chunk */) {
        // some numpty has read some data that's not for them and they want to put it back!
        // Might implement this some day
        throw new Error('Not Implemented');
    }

    wrap( /* stream */) {
        // not implemented
        throw new Error('Not Implemented');
    }
}

export default StreamBase64;
